One or more embodiments disclosed within this specification relate to memory management. More particularly, one or more embodiments relate to garbage collection and memory access protection.
Memory safety in the context of C/C++ type programs has become a significant concern. Memory access errors can refer to a dereference outside the bounds of the referent, either address-wise or time-wise. Address-wise access errors are spatial access errors with one example being an array out of bounds access error. Time-wise access errors are temporal access errors with one example being dereferencing a pointer after the object has been freed.
Conventional garbage collection techniques typically presume that pointers collected in a scan of a program memory reflect all of the pointers that the program will utilize. Such presumptions, however, do not account for the arbitrary synthesis capabilities that exist within C/C++ type languages. Arbitrary pointer synthesis allows the program to generate further pointers to memory during execution. This capability can negate the analysis results described above.